class Solution:
    def bulbSwitch(self, n: int) -> int:
        return int(n ** 0.5)
if __name__ == '__main__':
    s = Solution()
    print(s.bulbSwitch(3))
# 思路：
# 问题转换：
# 每个灯泡的状态取决于它被切换的次数。
# 第i个灯泡被切换的次数 = 它的因子个数（包括自己和1）。
# 如果某个灯泡被切换了奇数次，最终是亮的。
# 因子的配对：除了完全平方数以外，因子总是成对出现，导致被切换偶数次。
# 只有完全平方数的因子是奇数个（因为平方根只算一次），所以最终会亮。
# 从 1 到 n，只有 平方数的位置灯泡是亮的
# 亮的灯泡个数 = 向下取整(sqrt(n))